package keyboaUtil.finalLibrary;

/**
 * @author 2B键盘
 * @version 1.0
 * @create: 2018-04-15 2:34
 * @desc 编码格式大全以及介绍,注意如果
 * io使用编码的时候,请核对一下文件的编码在进行
 * 编码设置,否则会乱码,目前的话更新了5个编码
 * 如果用户需要自行设置编码,那么可以继承此类继续进行
 * 编码的添加
 **/
public class Encoding {

    /**
     * UTF-8
     * 互联网的普及，强烈要求出现一种统一的编码方式。UTF-8就是在互联网上使用最广的一种unicode的实现方式。其他实现方式还包括UTF-16和UTF-32，
     * 不过在互联网上基本不用。重复一遍，这里的关系是，UTF-8是Unicode的实现方式之一。
     * UTF-8最大的一个特点，就是它是一种变长的编码方式。它可以使用1~4个字节表示一个符号，根据不同的符号而变化字节长度。
     *
     * UTF-8的编码规则很简单，只有两条：*
     * (1）对于单字节的符号，字节的第一位设为0，后面7位为这个符号的unicode码。因此对于英语字母，UTF-8编码和ASCII码是相同的。*
     * (2）对于n字节的符号（n>1），第一个字节的前n位都设为1，第n+1位设为0，后面字节的前两位一律设为10。剩下的没有提及的二进制位，
     * 全部为这个符号的unicode码。
     */
    public static final String UTF8 = "UTF-8";

    /**
     * GBK and GB2312
     * GBK和GB2312都是针对简体字的编码，只是GB2312只支持六千多个汉字的编码，而GBK支持1万多个汉字编码。
     * 而GB18030是用于繁体字的编码。汉字存储时都使用两个字节来储存。
     */
    public static final String GBK = "GBK";
    public static final String GB2312 = "GB2312";

    /**
     * ASCII码
     * 这是美国在19世纪60年代的时候为了建立英文字符和二进制的关系时制定的编码规范，
     * 它能表示128个字符，其中包括英文字符、阿拉伯数字、西文字符以及32个控制字符。它用一个字节来表示具体的字符，
     * 但它只用后7位来表示字符（2^7=128），最前面的一位统一规定为0。
     */
     public static final String ASCII = "ASCII";

    /**
     * Unicode符号集
     * 同一个二进制数字可以被解释成不同的符号。因此，要想打开一个文本文件，
     * 就必须知道它的编码方式，否则用错误的编码方式解读，就会出现乱码。为什么电子邮件常常出现乱码？
     * 就是因为发信人和收信人使用的编码方式不一样。而Unicode就是这样一种编码：它包含了世界上所有的符号，
     * 并且每一个符号都是独一无二的。比如，U+0639表示阿拉伯字母Ain，U+0041表示英语的大写字母A，U+4E25表示汉字“严”。
     * 具体的符号对应表，可以查询unicode.org，或者专门的汉字对应表 。很多人都说Unicode编码，
     * 但其实Unicode是一个符号集（世界上所有符号的符号集），而不是一种新的编码方式。
     */
     public static final String UNICODE = "Unicode";

}
